package com.rolerealm.service;

import com.rolerealm.domain.vo.CharacterTagVO;

import java.util.List;

/**
 * 角色标签服务接口
 * 
 * @author RoleRealm Team
 * @version 1.0.0
 */
public interface CharacterTagService {

    /**
     * 根据角色ID获取标签列表
     * 
     * @param characterId 角色ID
     * @return 标签列表
     */
    List<CharacterTagVO> getTagsByCharacterId(Long characterId);

    /**
     * 根据角色ID列表批量获取标签
     * 
     * @param characterIds 角色ID列表
     * @return 标签列表
     */
    List<CharacterTagVO> getTagsByCharacterIds(List<Long> characterIds);

    /**
     * 根据标签名称获取角色ID列表
     * 
     * @param tagName 标签名称
     * @return 角色ID列表
     */
    List<Long> getCharacterIdsByTagName(String tagName);

    /**
     * 根据标签类型获取标签列表
     * 
     * @param tagType 标签类型
     * @return 标签列表
     */
    List<CharacterTagVO> getTagsByTagType(String tagType);

    /**
     * 获取热门标签
     * 
     * @param limit 限制数量
     * @return 标签列表
     */
    List<CharacterTagVO> getPopularTags(Integer limit);

    /**
     * 为角色添加标签
     * 
     * @param characterId 角色ID
     * @param tagName 标签名称
     * @param tagType 标签类型
     * @param tagColor 标签颜色
     * @param description 标签描述
     * @return 是否添加成功
     */
    Boolean addTagToCharacter(Long characterId, String tagName, String tagType, String tagColor, String description);

    /**
     * 从角色移除标签
     * 
     * @param characterId 角色ID
     * @param tagId 标签ID
     * @return 是否移除成功
     */
    Boolean removeTagFromCharacter(Long characterId, Long tagId);

    /**
     * 更新角色标签
     * 
     * @param tagId 标签ID
     * @param tagName 标签名称
     * @param tagType 标签类型
     * @param tagColor 标签颜色
     * @param description 标签描述
     * @return 是否更新成功
     */
    Boolean updateCharacterTag(Long tagId, String tagName, String tagType, String tagColor, String description);
}
